#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <fcntl.h>
#include <sys/mman.h>
#include <sys/stat.h>
#include <sys/ipc.h>
#include <unistd.h>
#include <pthread.h>
#include "include.h"

int ma_init(size_t mem, off_t sw, const char* swap_path);
/*
EALREADY - повторный вызов ma_init
ENOMEM - невозможно выделить место под кучу размеров mem 
EACCES - нет прав доступа к файлу swap_path
EFAULT - адрес swap_path недоступен
EBADR - mem>swap
*/

//------------------------------------------------------------------------

void ma_deinit();

//--------------------------------------------------------------------------

int ma_free(size_t id);


/*
EFAULT - память с таким идентификатором ещё не выделена, или уже освобождена
EBUSY - память  ещё не освобождена
ECANCELED - вызов функции до инициализации аллокатора
*/

//-------------------------------------------------------------------------------------------
	
size_t ma_alloc(size_t sz);

/*
ENOMEM - в куче недостаточно памяти для выделения участка размером sz (swap - уже_выделенная_память < sz)
E2BIG - запрашиваемый участок памяти невозможно будет уместить в оперативной памяти (mem < sz)
EMLINK - закончились свободные идентификаторы
ECANCELED - вызов функции до инициализации аллокатора
*/

//-------------------------------------------------------------------

void* ma_get(size_t id);

/*
EFAULT - память с таким идентификатором ещё не выделена, или уже освобождена
ENOMEM - недостаточно места в оперативной памяти
ENOBUFS - память слишком фрагментирована
EBADF - ошибка файла подкачки
ECANCELED - вызов функции до инициализации аллокатора
*/

//--------------------------------------------------------------------------------

int ma_release(size_t id);

/*
EFAULT - память с таким идентификатором ещё не выделена, или уже освобождена(с помощью ma_free() или ma_release())
ECANCELED - вызов функции до инициализации аллокатора
*/
